package createpattern.singletonpattern.lazy;
/**
 * 懒汉式4 - 双重检查模式 - 解决可能带来的空指针异常问题
 * 解决双重检查锁模式带来空指针异常的问题，只需要使用 volatile 关键字, volatile 关
 * 键字可以保证可见性和有序性
 * */
public class Singleton4 {

    private Singleton4(){}

    // 使用volatile防止指令重排,保持可见性和有序性,避免空指针问题
    private static volatile Singleton4 instance;

    public static Singleton4 getInstance() {
        if (instance == null) {
            synchronized (Singleton4.class) {
                if (instance == null) {
                    instance = new Singleton4();
                }
            }
        }
        return instance;
    }
}
